/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2010 huliqing, huliqing.cn@gmail.com
 *
 * This file is part of QFaces.
 * QFaces is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * QFaces is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with QFaces.  If not, see <http://www.gnu.org/licenses/>.
 *
 * 这个文件是QFaces的一部分。
 * 您可以单独使用或分发这个文件，但请不要移除这个头部声明信息.
 * QFaces是一个自由软件，您可以自由分发、修改其中的源代码或者重新发布它，
 * 新的任何修改后的重新发布版必须同样在遵守LGPL3或更后续的版本协议下发布.
 * 关于LGPL协议的细则请参考COPYING、COPYING.LESSER文件，
 * 您可以在QFaces的相关目录中获得LGPL协议的副本，
 * 如果没有找到，请连接到 http://www.gnu.org/licenses/ 查看并获取副本。
 *
 * - Author: Huliqing
 * - Contact: huliqing.cn@gmail.com
 * - License: GNU Lesser General Public License (LGPL)
 * - Blog and source code availability: http://www.huliqing.name/
 */

package name.huliqing.qfaces;

import java.util.ArrayList;

public class ResourceObj implements java.io.Serializable {

    // System Resource Loaded, identify if the system resource had loaded.
    private boolean sysLoaded = false;
    // ---- 系统资源
    // 系统不能缺少的css资源文件
    private ArrayList<String> systemCss = new ArrayList<String>();
    // 系统不能缺少的JavaScript资源文件
    private ArrayList<String> systemJavaScript = new ArrayList<String>();
    // 系统不能缺少的JavaScript初始化函数
    private ArrayList<String> systemJavaScriptInit = new ArrayList<String>();
    // ---- 组件资源
    // 已经加载的js文件,注：存在于该容器下的js文件表明是已经加载过了的，
    // 这为了防止重复载装JS资源文件
    private ArrayList<String> javaScriptLoaded = new ArrayList<String>();
    // 延迟加载的js文件
    private ArrayList<String> javaScriptLazy = new ArrayList<String>();
    // 延迟加载的init函数
    private ArrayList<String> javaScriptInitLazy = new ArrayList<String>();

    public ArrayList<String> getJavaScriptLoaded() {
        return this.javaScriptLoaded;
    }

    /**
     * 将一个已经直接载装的JavaScript资源添加到列表中，以便记住该资源已经装载.
     * @param jsPath
     */
    public void addJavaScriptLoaded(String jsPath) {
        if (jsPath != null && !javaScriptLoaded.contains(jsPath)) {
            javaScriptLoaded.add(jsPath);
        }
    }

    /**
     * 这里要访止重复装载同一个js资源,jssDirect中的js资源是“积极”加载方式，
     * 即在调用ResLoader2装载资源的时候就已经直接加载了。所以这里需要确定
     * 是否已经装载过该资源。
     * @param jsPath
     */
    public void addJavaScriptLazy(String jsPath) {
        if (jsPath != null && !javaScriptLoaded.contains(jsPath) && !javaScriptLazy.contains(jsPath)) {
            javaScriptLazy.add(jsPath);
        }
    }

    // 对于init函数不需要也不能访止重复装载
    public void addJavaScriptInitLazy(String init) {
        if (init != null) {
            javaScriptInitLazy.add(init);
        }
    }

    /**
     * 获取所有的延迟加载的JavaScript资源。
     * @return javaScriptLazy
     */
    public ArrayList<String> getJavaScriptLazy() {
        return this.javaScriptLazy;
    }

    /**
     * 获取所有的延迟加载的JavaScript init函数。
     * @return javaScriptInits
     */
    public ArrayList<String> getJavaScriptInitLazy() {
        return this.javaScriptInitLazy;
    }

    // ---- System resource
    /**
     * 获取系统必要的css资源文件
     */
    public ArrayList<String> getSystemCss() {
        return systemCss;
    }

    /**
     * 获取系统必要的JavaScript资源文件
     * @return systemJavaScript
     */
    public ArrayList<String> getSystemJavaScript() {
        return systemJavaScript;
    }

    /**
     * 获取系统必要的JavaScript初始化函数
     * @return systemJavaScriptInit
     */
    public ArrayList<String> getSystemJavaScriptInit() {
        return systemJavaScriptInit;
    }

    /**
     * 添加系统必要的css资源文件
     * @param css
     */
    public void addSystemCss(String css) {
        if (css != null && !this.systemCss.contains(css)) {
            this.systemCss.add(css);
        }
    }

    /**
     * 添加系统必要的JavaScript资源文件
     * @param javaScript
     */
    public void addSystemJavaScript(String javaScript) {
        if (javaScript != null && !this.systemJavaScript.contains(javaScript)) {
            this.systemJavaScript.add(javaScript);
        }
    }

    /**
     * 添加系统必要的JavaScript 初始化函数资源文件
     * @param javaScriptInit
     */
    public void addSystemJavaScriptInit(String javaScriptInit) {
        if (javaScriptInit != null) {
            this.systemJavaScriptInit.add(javaScriptInit);
        }
    }

    /**
     * 确定是否已经加载了系统必要资源
     * @return sysLoaded
     */
    public boolean isSysLoaded() {
        return sysLoaded;
    }

    /**
     * 设置系统必要的资源是否已经加载
     * @param sysLoaded
     */
    public void setSysLoaded(boolean sysLoaded) {
        this.sysLoaded = sysLoaded;
    }
}
